home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / util / libs / graphics3d.lha / doc / graphics3D.h.doc < prev    next >
Encoding:
Text File  |  1998-04-13  |  9.3 KB  |  307 lines

  1. /*
  2. **      $VER: graphics3d.h 10.02 (02.03.98) 
  3. ** 
  4. **      main include file for graphics3d.library
  5. **
  6. **      (C) Copyright 1997 Patrizio Biancalani
  7. **      All Rights Reserved.
  8. */
  9.  
  10. #ifndef GRAPHICS3D_GRAPHICS3D_H
  11. #define GRAPHICS3D_GRAPHICS3D_H
  12.  
  13. #define JAM1 0
  14. #define JAM2 1
  15. #define COMPLEMENT 2
  16. #define INVERSVID 4
  17. #define PROSP_P 0    /* tipo proiezione prospettica */
  18. #define PARAL_P 1    /* tipo proiezione parallela */
  19. #define WIREF    0    /* modo visualizzazione in wire frame */
  20. #define SOLID    2    /* modo visualizzazione in solid */
  21. #define FLAT     1    /* modo visualizzazione i flat shading */
  22. #define ZPLANE  0       /* #1 modo clippaggio oggetti */
  23. #define FRUSTUM 1       /* #2 modo clippaggio oggetti */
  24. #define SFIXV   8       /* n# di shift per cal. num. virgola fissa */
  25. #define FIXV    256    /* fattore moltipl. per num. virgola fissa */
  26. #define FIXVM   128    /* meta' di FIXV , per effettuare appros.  */
  27. #define MFRAC   FIXV    /* maschera per estrarre parte frazionaria */
  28. #define MINT 0xFFFFFFFF /* maschera per estrarre parte intera */
  29. #define END_T  0    /* fine array tag3d di dati */
  30.  
  31. /* 
  32.   tipi dati per tag3d.tipo riconosciuti attualmente per 
  33.   funzione cascene()
  34. */
  35. #define CS_PROJET 1    /* tipo di proiezione */
  36. #define CS_SBUFF  2     /* attivazione o meno single buffering */
  37. #define CS_GCOLOR 3    /* nuovo colore sfondo box di visualizzazione */
  38. #define CS_VDIST  4    /* nuovo valore distanza da piano di proiezione */
  39. #define CS_NPX0      5     /* nuova posizione X per box di visualizzazione */
  40. #define CS_NPY0   6     /* nuova posizione Y per box di visualizzazione */
  41.  
  42. /** STRUTTURE DATI DI USO ESTERNO ED INTERNO **/
  43. /* vertice, usa formato float a virgola fissa ,(val*FIXV) */ 
  44. struct vertex
  45. {
  46. long int x;
  47. long int y;
  48. long int z;
  49. };
  50.  
  51. /* struttura per definizione colore */
  52. struct rgbtype
  53. {
  54. short int r;
  55. short int g;
  56. short int b;
  57. };
  58.  
  59. /* struttura tag3d per definire un array di valori estendibile */
  60. /* analogo alla struttura TagItem dell' Amiga O.S.             */
  61. struct tag3d
  62. {
  63. short unsigned int tipo;    /* flag che identifica valore 
  64.                         (se=0 fine array) */
  65. long int val;            /* valore effettivo */
  66. };         
  67.  
  68. /* !!! STRUTTURE E DEFINIZIONI GLOBALI DI USO ESCLUSIVAMENTE INTERNO !!! */
  69.  
  70. /** COSTANTI DI USO SOLO INTERNO **/
  71. #define MAXPOINT  4    /* massimo numero di punti per poligono */
  72. #define MAXOBJECT 100    /* massimo numero oggetti per mondo 3D (max. 65535)*/
  73. #define MAXPLFRAM 10000    /* massimo numero poligoni in una frame (16*12) */
  74. #define MAXVERT   1000    /* massimo numero vertici in un poligono */
  75.  
  76. /* matrice di trasformazione (4x4) */
  77. /* usa formato float a virgola fissa ,(val*FIXV) */ 
  78. struct matrix4x4
  79. {
  80. long int r0c0;
  81. long int r0c1;
  82. long int r0c2;
  83. long int r0c3;
  84. long int r1c0;
  85. long int r1c1;
  86. long int r1c2;
  87. long int r1c3;
  88. long int r2c0;
  89. long int r2c1;
  90. long int r2c2;
  91. long int r2c3;
  92. long int r3c0;
  93. long int r3c1;
  94. long int r3c2;
  95. long int r3c3;
  96. };
  97.  
  98. /* matrice di trasformazione (1x4) */
  99. /* usa formato float a virgola fissa ,(val*FIXV) */ 
  100. struct matrix1x4
  101. {
  102. long int r0c0;
  103. long int r0c1;
  104. long int r0c2;
  105. long int r0c3;
  106. };
  107.  
  108. /* vettore */
  109. /* usa formato float a virgola fissa ,(val*FIXV) */ 
  110. struct vector
  111. {
  112. long int x;
  113. long int y;
  114. long int z;
  115. long int w;
  116. };
  117.  
  118. /* pixel */
  119. /* usa formato intero a 2 bytes */
  120. struct pixel
  121. {
  122. short int x;
  123. short int y;
  124. };
  125.  
  126. /* struttura per definire una linea */
  127. /* usa due riferimenti a strutture vertice */
  128. struct line
  129. {
  130. struct vertex *a;        /* puntatore a st. vertex di partenza */
  131. struct vertex *b;        /* puntatore a st. vertex d'arrivo */
  132. };
  133.  
  134. /* struttura per definire direzione in spazio 3d */
  135. struct dir3d
  136. {
  137. long int angx;
  138. long int angy;
  139. long int angz;
  140. };
  141.  
  142. /* struttura per definizione di un poligono */
  143. struct polygon
  144. {
  145. char numpoints;
  146. short int color;
  147. short int shade;
  148. char twosided;
  149. char visible;
  150. char clipped;
  151. char active;
  152. long int vertexlist0;    /* puntatore a #1 indice vertici */ 
  153. long int vertexlist1;     /* puntatore a #2 indice vertici */
  154. long int vertexlist2;     /* puntatore a #3 indice vertici */ 
  155. long int vertexlist3;    /* puntatore a #4 indice vertici */
  156. };
  157.  
  158. /* struttura di descrizione di un oggetto */
  159. struct objectnode
  160. {
  161. long int id;        /* identificativo univoco per oggetto */
  162. long int dummy;        /* pad per poter usare name con StringF */ 
  163. char name[22];
  164. long int numverts;
  165. struct vertex *vorig;    /* puntatore a elenco vertici loc. orig. */
  166. struct vertex *vlocal;    /* puntatore a elenco vertici locali */
  167. struct vertex *vcamera;    /* puntatore a elenco vertici camera */
  168. long int numpolys;
  169. struct polygon *polys;    /* puntatore a elenco poligoni */
  170. char shade;        /* metodo di visualiz. (WIRE,SOLID,FLAT) */
  171. char state;        /* segnala se oggetto da visualizzare */
  172. char clipped;        /* segnala se oggetto clippato interamente*/
  173. char trasf;        /* flag per segnalare eventuale trasf. avv.*/
  174. long int worldposx;    /* coord. x punto d'inserzione oggetto */
  175. long int worldposy;    /* coord. y  "        "          "     */
  176. long int worldposz;    /* coord. z  "        "          "     */
  177. long int xmax;        /* vertici bounding box oggetto */
  178. long int ymax;        /*              "               */
  179. long int zmax;        /*        "        */
  180. long int xmin;        /*        "        */
  181. long int ymin;        /*        "        */
  182. long int zmin;        /*        "        */    
  183. };
  184.  
  185. /* struttura per definizione di un poligono da visualizzare */
  186. struct polytemp
  187. {
  188. short int    x1;
  189. short int    y1;
  190. short int    x2;
  191. short int    y2;
  192. short int    x3;
  193. short int    y3;
  194. short int    x4;
  195. short int    y4;
  196. short int    x5;
  197. short int    y5;
  198. short int numpoints;
  199. short int     shade;
  200. short int       obj;
  201. long  int      npol;
  202. long  int    svalue;
  203. char          vmode;
  204. };
  205.  
  206. /** 
  207.     struttura di descrizione generale ambiente, il puntatore ad essa 
  208.     va dato come primo parametro al richiamo di ogni funzione 
  209.     dall'esterno
  210. **/
  211. struct ambient3d
  212. {
  213. struct grafica *graf;        /* valore ritornato da PE_ini_g */
  214. struct Window *win;        /* punt. a finestra usata */
  215. long int half_screen_width;
  216. long int half_screen_height;
  217. long int viewing_distance;
  218. short int gl_triangle_color;
  219. short int minx;
  220. short int miny;
  221. short int maxx;
  222. short int maxy;
  223. short int maxintensity;
  224. long int near_z;
  225. long int far_z;
  226. long int aspect_ratio;        /* num. reale a virgola fissa (val*FIXV) */
  227. long int ambient_light;        /* num. reale a virgola fissa (val*FIXV) */
  228. long int inv_aspect_ratio;    /* num. reale a virgola fissa (val*FIXV) */
  229. long int bord_col;        /* colore bordo poligoni (se <0 no bordo)*/
  230. long int gcolor;        /* colore sfondo scena */
  231. char projection_type;        /* tipo di proiezione (0=pros. 1=paral.) */
  232. char view_mode;            /* modo vis. (1=flat 0=wire 2=solid) */
  233. char clip_mode;
  234. char agg_all;            /* flag per forzare aggiornamento scena */
  235. long int dummy;
  236. struct vector light_source;    /* puntatore a struttura vector */
  237. long int dummy1;
  238. struct vector view_point;    /* puntatore a struttura vector */ 
  239. struct dir3d view_angle;    /* puntatore a struttura dir3d */
  240. struct matrix4x4 global_view;    /* puntatore a struttura matrix4x4 */
  241. char *temp;            /* puntatore ad area per uso temporaneo */
  242. long int *iobjects;        /* punt. ad array con indici su objects */
  243. struct objectnode *objects;    /* punt. ad array di strutture objectnode */
  244. long int *iwpolys;        /* punt. ad array puntatori su worldpolys */
  245. struct polytemp *worldpolys;    /* punt. ad array di strutture polytemp */
  246. long int *sintable;        /* punt. ad array di reali a virg. fissa */
  247. long int *costable;        /* punt. ad array di reali a virg. fissa */
  248. long int total_polys;        /* n# totale poligoni da tracciare */
  249. short int total_objects;    /* n# totale oggetti presenti */
  250. long int attuale;        /* oggetto attualmente selezionato */
  251. long int numero;        /* numero inc. alla creazione di un oggetto*/
  252. long int iterazioni;        /* n# iterazioni per sorting */
  253. };
  254.  
  255. /* !!! STRUTTURE E DEFINIZIONI GLOBALI DI USO ESCLUSIVAMENTE INTERNO !!! */
  256.  
  257. #define MAXVER(vert) (vert*5+30)
  258.  
  259. /**** dichiarazioni per poter usare sizeof con queste strutture  ****/
  260. /**** probabilmente utile solo se si usa VBCC v0.5 ****/
  261.  
  262. typedef struct grafica Sgrafica;
  263. typedef struct AreaInfo SAreaInfo;
  264. typedef struct TmpRas STmpRas;
  265. typedef struct objectnode Sobjectnode;
  266. typedef struct vertex Svertex;
  267. typedef struct polygon Spolygon;
  268. typedef struct vector Svector;
  269. typedef struct polytemp Spolytemp;
  270. typedef struct dir3d Sdir3d;
  271. typedef struct matrix4x4 Smatrix4x4;
  272. typedef struct ambient3d Sambient3d;
  273.  
  274. /********************************************************************/
  275.  
  276. struct grafica
  277. {
  278.  struct AreaInfo *o_ai;    /* valore originale puntatore ad areainfo */
  279.  struct TmpRas *o_tr;    /* valore originale puntatore ad tmprast */    
  280.  struct AreaInfo n_ai;    /* nuova areainfo */
  281.  struct TmpRas n_tr;    /* nuova tmpras */
  282.  char *pras;        /* puntatore a area di memoria grafica */
  283.  char *b_af;        /* puntatore a buffer vettori per areafill */
  284.  long int lb_af;    /* dimensioni area precedente */
  285.  struct ViewPort *vpor;    /* puntatore a viewport dello schermo della fin.*/
  286.  struct RastPort *rast;    /* puntatore a rastport usato dalle routin */
  287.  struct Window *wind;    /* puntatore a finestra su cui agire */
  288.  long int larg;        /* larghezza box in cui lavorera' areafill */
  289.  long int alte;        /* altezza box in cui lavorera' areafill */
  290.  long int clipx;    /* origine x clip box */
  291.  long int clipy;     /* origine y clip box */
  292.  long int clipdx;    /* larghezza clip box */
  293.  long int clipdy;    /* altezza clip box */
  294. /** estensioni per double buffering **/
  295.  char    fdouble;    /* flag per attivare double buffer (0=off 1=on)*/
  296.  struct RastPort *rast1;/* puntatore a rastport della finestra*/
  297.  struct RastPort *rast2;/* puntatore a rastport nascosto */
  298.  struct RasInfo    *NB_rinfo;       
  299.  struct BitMap     *NB_bmap;        
  300.  struct Layer_Info *NB_layerinfo;   
  301.  struct Layer      *NB_layer;       
  302.  
  303. };
  304.  
  305.  
  306. #endif /* GRAPHICS3D_GRAPHICS3D_H */
  307.